home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 2002 November / SGI Freeware 2002 November - Disc 2.iso / dist / fw_gimp.idb / usr / freeware / include / gck / gck.h.z / gck.h
Encoding:
C/C++ Source or Header  |  2002-07-08  |  6.3 KB  |  176 lines

  1. /***************************************************************************/
  2. /* GCK - The General Convenience Kit. Generally useful conveniece routines */
  3. /* for GIMP plug-in writers and users of the GDK/GTK libraries.            */
  4. /* Copyright (C) 1996 Tom Bech                                             */
  5. /*                                                                         */
  6. /* This program is free software; you can redistribute it and/or modify    */
  7. /* it under the terms of the GNU General Public License as published by    */
  8. /* the Free Software Foundation; either version 2 of the License, or       */
  9. /* (at your option) any later version.                                     */
  10. /*                                                                         */
  11. /* This program is distributed in the hope that it will be useful,         */
  12. /* but WITHOUT ANY WARRANTY; without even the implied warranty of          */
  13. /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           */
  14. /* GNU General Public License for more details.                            */
  15. /*                                                                         */
  16. /* You should have received a copy of the GNU General Public License       */
  17. /* along with this program; if not, write to the Free Software             */
  18. /* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,   */
  19. /* USA.                                                                    */
  20. /***************************************************************************/
  21.  
  22. #ifndef __GCK_H__
  23. #define __GCK_H__
  24.  
  25. #include <gtk/gtk.h>
  26.  
  27. #ifdef __cplusplus
  28. extern "C" {
  29. #endif
  30.  
  31. #define GCK_CONSTRAIN_RGB      1<<0
  32. #define GCK_CONSTRAIN_RGBA     1<<1
  33. #define GCK_CONSTRAIN_GRAY     1<<2
  34. #define GCK_CONSTRAIN_GRAYA    1<<3
  35. #define GCK_CONSTRAIN_INDEXED  1<<4
  36. #define GCK_CONSTRAIN_INDEXEDA 1<<5
  37. #define GCK_CONSTRAIN_ALL      0xff
  38.  
  39. #define GCK_HSV_UNDEFINED -1.0
  40. #define GCK_HSL_UNDEFINED -1.0
  41.  
  42. typedef enum
  43. {
  44.   DITHER_NONE,
  45.   DITHER_FLOYD_STEINBERG,
  46.   DITHER_ORDERED
  47. } GckDitherType;
  48.  
  49. typedef struct
  50. {
  51.   gdouble r, g, b, a;
  52. } GckRGB;
  53.  
  54. typedef struct
  55. {
  56.   guchar       r, g, b;
  57.   const gchar *name;
  58. } GckNamedRGB;
  59.  
  60. typedef struct
  61. {
  62.   GdkVisual    *visual;
  63.   GdkColormap  *colormap;
  64.   gulong        allocedpixels[256];
  65.   guint32       colorcube[256];
  66.   GdkColor      rgbpalette[256];
  67.   guchar        map_r[256], map_g[256], map_b[256];
  68.   guchar        indextab[7][7][7];
  69.   guchar        invmap_r[256], invmap_g[256], invmap_b[256];
  70.   gint          shades_r, shades_g, shades_b, numcolors;
  71.   GckDitherType dithermethod;
  72. } GckVisualInfo;
  73.  
  74. typedef void (* GckRenderFunction)      (gdouble, gdouble, GckRGB *);
  75. typedef void (* GckPutPixelFunction)    (gint, gint, GckRGB *);
  76. typedef void (* GckProgressFunction)    (gint, gint, gint);
  77. typedef void (* GckColorUpdateFunction) (GckRGB *);
  78. typedef gint (* GckEventFunction)       (GtkWidget *, GdkEvent *, gpointer);
  79.  
  80. typedef struct
  81. {
  82.   GtkWidget     *widget;
  83.   GckVisualInfo *visinfo;
  84. } GckApplicationWindow;
  85.  
  86. typedef struct
  87. {
  88.   gint      x, y, w, h;
  89.   GdkImage *buffer;
  90. } _GckBackBuffer;
  91.  
  92.  
  93.  
  94. GckVisualInfo *gck_visualinfo_new        (void);
  95. void           gck_visualinfo_destroy    (GckVisualInfo *visinfo);
  96. GckDitherType  gck_visualinfo_get_dither (GckVisualInfo *visinfo);
  97. void           gck_visualinfo_set_dither (GckVisualInfo *visinfo,
  98.                                           GckDitherType dithermethod);
  99.  
  100. /* RGB to Gdk routines */
  101. /* =================== */
  102.  
  103. void      gck_rgb_to_gdkimage       (GckVisualInfo *visinfo,
  104.                                      guchar *RGB_data,
  105.                                      GdkImage *image,
  106.                                      int width,int height);
  107.  
  108. /* returns a static storage */
  109. GdkColor *gck_rgb_to_gdkcolor       (GckVisualInfo *visinfo,guchar r,guchar g,guchar b);
  110.  
  111. /* returns a malloc'ed area */
  112. GdkColor *gck_rgb_to_gdkcolor_r     (GckVisualInfo *visinfo,guchar r,guchar g,guchar b);
  113.  
  114. void      gck_gc_set_foreground     (GckVisualInfo *visinfo,GdkGC *gc,
  115.                                      guchar r, guchar g, guchar b); 
  116. void      gck_gc_set_background     (GckVisualInfo *visinfo,GdkGC *gc,
  117.                                      guchar r, guchar g, guchar b); 
  118.  
  119. /********************/
  120. /* Color operations */
  121. /********************/
  122.  
  123. double  gck_bilinear      (double x,double y, double    *values);
  124. guchar  gck_bilinear_8    (double x,double y, guchar    *values);
  125. guint16 gck_bilinear_16   (double x,double y, guint16   *values);
  126. guint32 gck_bilinear_32   (double x,double y, guint32   *values);
  127. GckRGB  gck_bilinear_rgb  (double x,double y, GckRGB *values);
  128. GckRGB  gck_bilinear_rgba (double x,double y, GckRGB *values);
  129.  
  130. /* RGB pixel operations */
  131. /* ==================== */
  132.  
  133. void      gck_rgb_add    (GckRGB *p,GckRGB *q);
  134. void      gck_rgb_sub    (GckRGB *p,GckRGB *q);
  135. void      gck_rgb_mul    (GckRGB *p,double b);
  136. void      gck_rgb_clamp  (GckRGB *p);
  137. void      gck_rgb_set    (GckRGB *p,double r,double g,double b);
  138. void      gck_rgb_gamma  (GckRGB *p,double gamma);
  139.  
  140. void      gck_rgba_add   (GckRGB *p,GckRGB *q);
  141. void      gck_rgba_sub   (GckRGB *p,GckRGB *q);
  142. void      gck_rgba_mul   (GckRGB *p,double b);
  143. void      gck_rgba_clamp (GckRGB *p);
  144. void      gck_rgba_set   (GckRGB *p,double r,double g,double b,double a);
  145. void      gck_rgba_gamma (GckRGB *p,double gamma);
  146.  
  147. /* Colorspace conversions */
  148. /* ====================== */
  149.  
  150. void      gck_rgb_to_hsv (GckRGB *p, double *h,double *s,double *v);
  151. void      gck_rgb_to_hsl (GckRGB *p, double *h,double *s,double *l);
  152.  
  153. void      gck_hsv_to_rgb (double h,double s,double v, GckRGB *p);
  154. void      gck_hsl_to_rgb (double h,double s,double l, GckRGB *p);
  155.  
  156. void      gck_rgb_to_hwb (GckRGB *rgb, gdouble *hue,gdouble *whiteness,gdouble *blackness);
  157. void      gck_hwb_to_rgb (gdouble H,gdouble W, gdouble B, GckRGB *rgb);
  158.  
  159. /* Supersampling */
  160. /* ============= */
  161.  
  162. gulong    gck_adaptive_supersample_area (int x1,int y1,int x2,int y2,
  163.                                          int max_depth,
  164.                                          double threshold,
  165.                                          GckRenderFunction    render_func,
  166.                                          GckPutPixelFunction  put_pixel_func,
  167.                                          GckProgressFunction  progress_func);
  168.  
  169. extern GckNamedRGB gck_named_colors[];
  170.  
  171. #ifdef __cplusplus
  172. }
  173. #endif
  174.  
  175. #endif  /* __GCK_H__ */
  176.